我把和老婆的微信聊天记录喂给 AI,它给我们写了一首歌
起因
我和老婆的聊天记录从 2024 年 6 月存到现在,六百多天,12 万行。从聊草坪为什么剪了之后没再长,到一起讨论婚礼日期。前段时间我突发奇想:能不能把这些聊天记录变成一首歌?
于是我开始了一场"聊天记录 → 歌词 → 歌曲"的折腾之旅。
这是最后做出来的歌:
![[我们.mp3]]
第一步:导出聊天记录
要把微信聊天记录弄出来,第一步是找一个靠谱的导出工具。我用了 WeFlow,这是一个开源的微信聊天记录查看、分析与导出工具。
WeFlow 的特点:
- 完全本地运行,不上传任何数据到云端,隐私有保障
- 支持 Windows、macOS、Linux 三平台
- 要求微信 4.0 及以上版本
- 可以导出为 TXT、HTML、JSON、Excel、CSV 等多种格式
安装很简单,去 Releases 页面下载对应的安装包,安装后打开即可。它会自动读取本地微信数据库,解密后展示聊天记录。选择目标对话,点击导出,选 TXT 格式,就能得到一份纯文本的聊天记录文件。
我导出了和老婆的全部私聊记录,得到一个 2.7MB 的 TXT 文件——这就是后面写歌的素材。
第二步:让 AI 写歌词
有了聊天记录,下一步是写歌词。这一步我用的是 Claude Code——Anthropic 出品的 AI 编程助手。
不过需要说明的是,Claude Code 是 Anthropic 的产品,国内用户无法直接使用它的官方模型。我通过 CC Switch 这个开源工具,将 Claude Code 的后端切换到了 MiniMax(minimaxi.com)的 API。CC Switch 是一个桌面应用,可以一键切换 Claude Code、Codex、Gemini CLI 等多种 AI 编程工具的 API 提供商,国内用户用它来接入第三方模型非常方便。
配置好之后,我把那个 2.7MB 的聊天记录 TXT 文件交给了 Claude Code,让它从这些日常对话中提炼出属于我们的故事。
分析过程
因为文件有 2.7MB,AI 无法一次性读完,所以它分段读取、搜索关键词,从中梳理出了我们感情发展的时间线:
- 2024 年 6 月:班车上的第一次心动,一句"若你不愿踏月而来,我便乘风而去"开启了所有故事
- 日常关心:反复叮嘱她喝蒲地兰治咳嗽、九号线太冷要把帽子戴上
- 通勤陪伴:从临港到市区,每天在地铁口等她下班
- 2024 年 7 月:开始规划婚礼,一起选瓷砖、挑婚戒
- 2025 年 9 月:在奉贤区民政局登记结婚
- 后来:一起买了 Tesla,从挤地铁变成了两个人开车
生成的歌词
AI 基于这些真实细节写了一首叫《我们》的歌:
我们从临港到市区 从第一句到每一句
早安晚安 都是我爱你的形状
我们从陌生到熟悉 从名字到宝贝
一千多天的聊天记录 全是我们活过的证据
没有虚构的浪漫桥段,每一句都是真实发生过的事。歌词里出现的"蒲地兰""九号线""顺风车""选瓷砖"全是聊天记录里的原文。
第三步:歌词变成歌曲
歌词写好了,接下来要让它们变成一首真正的歌。这一步同样用到了 MiniMax 的能力。
MiniMax 技能
MiniMax(minimaxi.com)除了提供大语言模型 API,还有一个 Claude Code 技能仓库,可以把音乐生成、图片生成、语音合成等能力直接集成到 Claude Code 里。我订阅的是他们的 Coding plan 套餐,自带音乐生成的配额。
安装技能很简单,在 Claude Code 里执行:
claude plugin marketplace add https://github.com/MiniMax-AI/skills
安装后 Claude Code 就多了音乐生成等能力。技能本质上是一个工作流编排层——它告诉 Claude Code 如何理解用户意图、组织歌词结构、调用底层 API。实际执行时,技能会调用 MiniMax 的 mmx 命令行工具(底层是 music-2.6 模型)来完成音乐生成。
生成过程
我在 Claude Code 里直接说"根据上面生成的歌词生成一首歌",它就自动调用了 MiniMax 的音乐生成技能,指定了风格、乐器、节奏等参数:
- 风格:indie folk ballad(独立民谣)
- 情绪:甜蜜、浪漫、温柔
- 人声:温暖的女声
- 乐器:木吉他、钢琴、轻弦乐
- 节奏:85 BPM
等了一两分钟,一首完整的 MP3 就生成了。
踩了一个坑
第一次生成的歌曲有个搞笑的问题:AI 歌手在开头唱了一句"轻柔钢琴声"。原因是我把歌词 [intro] 部分写成了描述性文字"轻柔钢琴声",AI 把它当歌词唱了出来。乐器描述应该只放在乐器参数里,[intro] 段要么留空,要么写真正的哼唱词。
修正后把 intro 改成"嗯~ 嗯嗯~",重新生成,这次就正常了。
第四步:制作封面
歌曲生成了,还需要一张封面。本来想用 MiniMax 的图片生成功能,但发现 Coding plan 不包含图片生成模型(image-01)。于是我写了一个 HTML 页面作为封面:深色渐变背景、飘落的花瓣、隐约的地铁线路(呼应九号线的记忆),标题"我们"用书法字体,底部写着"从临港到市区 · 从陌生到永远"。
HTML 封面在浏览器里看着不错,但它终究是个网页文件,没法直接绑定到歌曲上。于是我让 Claude Code 用 Playwright 把 HTML 自动渲染成了一张 800×800 的 PNG 图片——不用手动截图,尺寸精确,透明度、动画效果都能完整保留。
第五步:把封面和歌词嵌入歌曲
有了封面图片,下一步是把它和歌词一起"烙印"到 MP3 文件里,这样不管用什么播放器打开,都能看到封面、读到歌词。
这一步用的是 Python 的 mutagen 库,它能直接读写 MP3 文件的 ID3 标签。具体做了这些事:
- 嵌入封面:将 PNG 图片转成 JPEG(兼容性更好),写入 ID3 的
APIC标签作为封面 - 嵌入歌词:将完整歌词写入
USLT(Unsynchronized Lyrics)标签 - 补充元信息:标题(我们)、艺人(致我最爱的人)、年份(2026)
踩了一路坑
这一步折腾得最多,前后解决了三个问题:
封面不显示。 第一次用的是 ID3v2.4 标签 + PNG 封面,Windows 播放器完全不认。改成 ID3v2.3 + JPEG 后封面正常显示。ID3v2.3 是目前兼容性最好的版本,PNG 格式很多播放器也不支持,JPEG 更保险。
歌词不显示。 嵌入歌词后播放器里看不到——Windows 自带的媒体播放器根本不支持读取嵌入歌词标签。解决方案是生成一个同名的 .lrc 歌词文件放在 MP3 旁边,第三方播放器(MusicPlayer2、foobar2000、AIMP 等)会自动读取。
歌词不同步。 一开始生成的 LRC 文件没有时间标签,歌词只能显示不能滚动。加上时间标签后,第一版的时间估算偏大,歌词越到后面越滞后。压缩了每行的时间间隔后才基本对上。由于没有音源分析工具,时间标签是根据歌曲结构和总时长估算的,无法做到逐字精确,但整体节奏能跟上。
最终成果
整理一下所有产出:
- 歌曲:
我们.mp3(5.1MB,已嵌入封面和歌词) - 歌词:
我们.lrc(LRC 格式,第三方播放器可直接显示) - 封面源文件:
cover.html(可用于后续修改设计)
一首完全由真实聊天记录驱动的情歌,从素材到成品,全部在电脑本地完成。
工具清单
| 工具 | 用途 | 费用 |
|---|---|---|
| WeFlow | 导出微信聊天记录 | 免费开源 |
| Claude Code | 分析聊天记录、写歌词 | 通过 CC Switch 接入 |
| CC Switch | 让 Claude Code 接入国内 API | 免费开源 |
| MiniMax | 提供大模型 API + 音乐生成 | Coding plan 即可 |
| MiniMax 技能 | Claude Code 音乐生成技能 | 随 MiniMax 套餐 |
| Playwright | HTML 封面渲染为 PNG 图片 | 开源免费 |
| mutagen | 封面和歌词嵌入 MP3 文件 | 开源免费 |
写在最后
技术一直在进步,但最有温度的永远是把技术用在真实的生活里。一千多天的"早安""晚安""吃药了吗""我去接你",这些看似平凡的对话,当它们被编织成一首歌的时候,突然就有了让人鼻子发酸的力量。
如果你也想试试,流程很简单:导出聊天记录 → 让 AI 提炼故事写歌词 → 用音乐生成工具变成歌。不需要懂乐理,不需要会唱歌,你只需要有故事——而你的聊天记录里,全都是。